# 1、创建一个包含以下元素的集合，并打印出来：{1, 2, 3, 4, 5}
from functools import reduce

my_set = {1, 2, 3, 4, 5}
print(my_set)

# 2、向集合中添加元素6，并打印集合
my_set.add(6)
print(my_set)

#3、从集合中移除元素3，并打印集合
my_set.remove(3)
print(my_set)

# 4、检查元素4是否在集合中，并打印结果
if 4 in my_set:
    print('4在集合')
else:
    print('4不在集合')

# 5、打印集合中所有元素的个数
print(len(my_set))

# 6、创建两个个包含以下元素的集合，并打印集合的交集：{1, 2, 3, 4, 5} 和 {4, 5, 6, 7, 8}
set01 = {1, 2, 3, 4, 5}
set02 = {4, 5, 6, 7, 8}
set03 = set01.intersection(set02)
print(set03)

#7、打印集合的并集
set04 = set01.union(set02)
print(set04)

# 8、打印集合的差集
set05 = set01.difference(set02)
set06 = set02.difference(set01)
print(set05,set06)

# 9、打印集合的对称差集
set07 = set01.symmetric_difference(set02)
print(set07)

#10、将集合{1, 2, 3, 4, 5}转换为列表，并打印
set1 = {1,2,3,4,5}
set1 = list(set1)
print(set1)

#11、创建一个集合{1, 2, 3}，并打印所有子集
set2 = {1,2,3}
result = [[]]
for i in set2:
    subsets = []
    for subset in result:
        subsets.append(subset + [i])
    result.extend(subsets)
for subset in result:
    print(set(subset))


#12创建一个集合{1, 2, 3}，并打印所有可能的二元组对--》输出: [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
set2 = {1,2,3}
set2 = list(set2)
result=[]
for i in range(len(set2)):
    for j in range(len(set2)):
        if i != j:
            result.append((set2[i],set2[j]))
print(result)

#13、创建一个包含以下元素的集合，并找到其中最大的元素
my_set = {-10, -5, 0, 5, 10}
print(max(my_set))

#14、创建一个包含以下元素的集合，并找到其中最小的元素
my_set = {-10, -5, 0, 5, 10}
print(min(my_set))

#15、创建一个包含以下元素的集合，并计算其元素的和
my_set = {1, 2, 3, 4, 5}
print(sum(my_set))

#16、创建一个包含以下元素的集合，并计算其元素的乘积（使用reduce函数）
my_set = {1, 2, 3, 4, 5}
product = reduce(lambda x,y:x*y,my_set)
print(product)

#17、创建一个包含以下元素的集合，并找到其中所有元素的平均值
my_set = {1, 2, 3, 4, 5}
print(sum(my_set)/len(my_set))

#18、给定一个整数集合 nums 和一个整数 k，要求将集合 nums 划分为 k 个非空子集，使得这些子集的元素和尽可能相等。如果无法平均划分，则尽可能使各子集和接近。请输出这 k 个子集。
# nums = {1,2,3,4,5,6,7,8,9,10}
# k = 3
# nums = list(nums)
# num_sort = sorted(nums)
# total_sort = sum(nums)
# avg = total_sort//k
#
# print(num_sort,avg)
# subsets = [[] for _ in range(k)]
# subsets_pre = [0] * k
#
# for i in range(k):
#     if subsets_pre[i] + nums[len(nums)] > avg:
#         continue
#     if subsets_pre[i] == subsets_pre[i - 1]:
#         continue
#
#     subsets[i].append(nums[len(nums)])
#     subsets_pre[i] = nums[len(nums)] + subsets_pre[i]
